/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.arqsw.servicios;

import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import org.apache.log4j.Logger;
import uy.edu.ort.arqsw.domino.PaginaWeb;

/**
 *
 * @author victor
 */
@Stateless
public class PaginaWebFacade implements PaginaWebFacadeLocal {
    @PersistenceContext(unitName = "obligContenidoWeb-ejbPU")
    private EntityManager em;
    private Logger log = Logger.getLogger(PaginaWebFacade.class);
    
    public PaginaWebFacade() {
    }

    @Override
    public void crear(PaginaWeb paginaweb) {
        em.persist(paginaweb);
    }

    @Override
    public void editar(PaginaWeb paginaweboriginal, PaginaWeb paginawebmodificada) {
        Query query = em.createQuery("SELECT p FROM PaginaWeb p WHERE p.fecha = :fecha and p.titulo = :titulo");
        query.setParameter("fecha", paginaweboriginal.getFecha(), TemporalType.DATE);
        query.setParameter("titulo", paginaweboriginal.getTitulo());
        
        PaginaWeb res_find = (PaginaWeb) query.setMaxResults(1).getSingleResult();
        res_find.setFecha(paginawebmodificada.getFecha());
        res_find.setTitulo(paginawebmodificada.getTitulo());
        res_find.setContenido(paginawebmodificada.getContenido());
        
        em.merge(res_find);
    }

    @Override
    public void remover(PaginaWeb paginaweb) {
        Query query = em.createQuery("SELECT p FROM PaginaWeb p WHERE p.fecha = :fecha and p.titulo = :titulo");
        query.setParameter("fecha", paginaweb.getFecha(), TemporalType.DATE);
        query.setParameter("titulo", paginaweb.getTitulo());
        
        PaginaWeb res_find = (PaginaWeb) query.setMaxResults(1).getSingleResult();
        
        em.remove(res_find);
    }

    @Override
    public List<PaginaWeb> buscar(Date fecha, String titulo, String contenido) {
        if (fecha == null && titulo.equals("") && contenido.equals("")) {
            return obtenerTodas();
        } else {
            Query query;
            String strParametros = "";

            if (!titulo.equals("")) {
                strParametros += " p.titulo = :titulo";
            }
            if (fecha != null) {
                if (strParametros.equals("")) {
                    strParametros += " p.fecha = :fecha";
                } else {
                    strParametros += " and p.fecha = :fecha";
                }
            }            
            if (!contenido.equals("")) {
                if (strParametros.equals("")) {
                    strParametros += " p.contenido = :contenido";
                } else {
                    strParametros += " and p.contenido = :contenido";
                }
            }
            
            String strQuery = "SELECT p FROM PaginaWeb p";            
            
            if (!strParametros.equals("")) {
                strQuery += " WHERE" + strParametros;                            
            }
            
            query = em.createQuery(strQuery);
            
            
            if (!titulo.equals("")) {
                query.setParameter("titulo", titulo);
            }
            if (fecha != null) {
                query.setParameter("fecha", fecha, TemporalType.DATE);
            }           
            if (!contenido.equals("")) {
                query.setParameter("contenido", contenido);
            }
            
            return (List<PaginaWeb>)query.getResultList();
        }
    }

    @Override
    public List<PaginaWeb> obtenerTodas() {
        Query query = em.createQuery("SELECT p FROM PaginaWeb p");
        
        log.debug("obtenerTodas()");
        
        return (List<PaginaWeb>) query.getResultList();
    }    
}
